/*
 * create:2015年4月17日 下午4:18:52
 * author:wangds  
 */

package net.wangds.common.context;

import net.wangds.common.GeneralParentObject;
import net.wangds.common.adapter.Adapter;
import net.wangds.common.context.MapAsEnvironment;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * .
 * 
 * @author wangds
 *
 */
public class DefaultMapAsEnvironment
    extends GeneralParentObject implements MapAsEnvironment, Adapter<Map<String, Object>> {
  /**
   * .
   */
  private final Map<String, Object> map = new HashMap<String, Object>();

  /*
   * @see net.wangds.common.context.Environment#getEnvironment(java.lang.String)
   * 
   * @author wangds 2015年4月17日 下午4:18:52.
   */
  @SuppressWarnings("unchecked")
  @Override
  public <T> T getEnvironment(String key) {
    return (T) (map.get(key));
  }

  /*
   * @see net.wangds.common.context.Environment#setEnvironment(java.lang.String,
   * java.lang.Object)
   * 
   * @author wangds 2015年4月17日 下午4:18:52.
   */
  @Override
  public <T> void setEnvironment(String key, T value) {
    this.map.put(key, value);
  }

  /*
   * @see net.wangds.common.context.Context#status(java.lang.Object[])
   * 
   * @author wangds 2015年4月17日 下午4:18:52.
   */
  @Override
  public <T> T status(Object... inputs) throws Exception {
    if (inputs == null) {
      return null;
    }
    int len = inputs.length;
    if (len == 1) {
      return this.getEnvironment(inputs[0].toString());
    } else if (len == 2) {
      this.setEnvironment(inputs[0].toString(), inputs[1]);
    } else if (len > 2) {
      Object[] arr = new Object[inputs.length - 1];
      System.arraycopy(inputs, 0, arr, 0, arr.length);
      this.setEnvironment(inputs[0].toString(), arr);
    }
    return null;
  }

  /*
   * @see
   * net.wangds.common.context.MapAsEnvironment#setEnvironmentMap(java.util.Map)
   * 
   * @author wangds 2015年4月17日 下午4:18:52.
   */
  @Override
  public void setEnvironmentMap(Map<String, Object> map) {
    // //TODO: Auto-generated method stub

  }

  /*
   * @see net.wangds.common.context.MapAsEnvironment#getEnvironmentMap()
   * 
   * @author wangds 2015年4月17日 下午4:18:52.
   */
  @Override
  public Map<String, Object> getEnvironmentMap() {
    // //TODO: Auto-generated method stub
    return null;
  }

  /*
   * @see net.wangds.common.adapter.Adapter#getAdaptee()
   * 
   * @author wangds 2015年4月18日 下午4:35:12.
   */
  @Override
  public Map<String, Object> getAdaptee() {
    return map;
  }

  /*
   * @see net.wangds.common.context.MapAsEnvironment#getEnvironmentKey()
   * 
   * @author wangds 2015年5月5日 下午3:30:15.
   */
  @Override
  public Collection<String> getEnvironmentKey() {
    return this.map.keySet();
  }

  /*
   * @see net.wangds.common.context.Context#getSchema()
   * 
   * @author wangds 2015年12月21日 下午7:48:08.
   */
  @Override
  public String getSchema() {
    return "Map";
  }
}
